<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文用户手册: 寻找要编辑的文件</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/usr_22.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>usr_22</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="usr_22.txt">usr_22.txt</a> </b>    适用于 Vim 9.0 版本。   最近更新: 2020年4月

                     <code class="vim">VIM 用户手册 - by Bram Moolenaar</code>
                                <code class="vim">译者</code>: Chimin Yen

                              寻找要编辑的文件


到处都是文件，你怎么查找它们呢？Vim 为我们提供了在目录树间浏览的种种方法。还有
若干命令让你从一个文件通过文件名跳转到一个文件。而且，Vim 还记着曾经编辑过哪些
文件。

 <a href="usr_22.html#22.1">22.1</a>   文件浏览器
 <a href="usr_22.html#22.2">22.2</a>   当前目录
 <a href="usr_22.html#22.3">22.3</a>   查找文件
 <a href="usr_22.html#22.4">22.4</a>   缓冲区列表

        下一章:  <a href="usr_23.html#usr_23.txt">usr_23.txt</a>   编辑特殊文件
        前一章:  <a href="usr_21.html#usr_21.txt">usr_21.txt</a>   离开和回来
          目录:  <a href="usr_toc.html#usr_toc.txt">usr_toc.txt</a> 

</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="22.1">22.1</a> </b>  文件浏览器</h4>
Vim 有个插件可以用来编辑一个目录。试一下这个命令: 
<code class="example"></code>
<code class="example">        :edit .</code>
<code class="example"></code>
借助魔术般的自动命令和 Vim 脚本功能，目录的内容被用来填充窗口。看起来就像这
样:

<code class="section">" ============================================================================ </code>
<code class="section">" Netrw Directory Listing                                        (netrw v109) </code>
<code class="section">"   Sorted by      name </code>
<code class="section">"   Sort sequence: [\/]$,\.h$,\.c$,\.cpp$,*,\.info$,\.swp$,\.o$\.obj$,\.bak$ </code>
<code class="section">"   Quick Help: <code class="special">&lt;F1&gt;</code>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec </code>
<code class="section">" ============================================================================ </code>
<code class="section">../ </code>
<code class="section">./ </code>
<code class="section">check/ </code>
<code class="section">Makefile </code>
<code class="section">autocmd.txt </code>
<code class="section">change.txt </code>
<code class="section">eval.txt~ </code>
<code class="section">filetype.txt~ </code>
<code class="section">help.txt.info </code>

你可以看到这样一些条目:

1.  浏览工具的名称和版本号
2.  浏览目录名
3.  排序方法 (可以是名字、时间或大小)
4.  名字如何排序 (目录优先，然后是 *.h 文件、*.c 文件，等等)
5.  如何得到帮助 (用 <code class="special">&lt;F1&gt;</code> 键)，然后是可用命令的概括列表
6.  文件列表，包括 "../"，用户可以由此列出父目录。

如果你启用了语法高亮功能，那么，目录里不同部分就显示成不同颜色，让你比较容易辨
认它们。

你可以用普通模式下的 Vim 命令在文本内到处移动。例如，移动光标到一个文件名上并
按下 <code class="special">&lt;Enter&gt;</code> 键。你就可以编辑那个文件了。要回到浏览器，再用一次 ":edit ." 或
":Explore" 即可，按 <code class="keystroke">CTRL-O</code> 也行。

试一下把光标移至某个目录名，按 <code class="special">&lt;Enter&gt;</code> 键。结果，浏览器就进了该目录，并把那里
的条目显示出来。对准第一个目录 "../" 按 <code class="special">&lt;Enter&gt;</code> 键， 让你返回父目录。按 "-" 键
可达到同样的目的，且无须先把光标移到 "../" 条目上。

你可以按 <code class="special">&lt;F1&gt;</code> 键获取关于 netrw 文件浏览器功能的帮助。帮助文字如下: 
<code class="example"></code>
<code class="example">    9. Directory Browsing        netrw-browse   netrw-dir   netrw-list   netrw-help</code>
<code class="example"></code>
<code class="example">    MAPS                                                                 netrw-maps</code>
<code class="example">         &lt;F1&gt;.............Help.......................................|netrw-help|</code>
<code class="example">         &lt;cr&gt;.............Browsing...................................|netrw-cr|</code>
<code class="example">         &lt;del&gt;............Deleting Files or Directories..............|netrw-delete|</code>
<code class="example">         -................Going Up...................................|netrw--|</code>
<code class="example">         a................Hiding Files or Directories................|netrw-a|</code>
<code class="example">         mb...............Bookmarking a Directory....................|netrw-mb|</code>
<code class="example">         gb...............Changing to a Bookmarked Directory.........|netrw-gb|</code>
<code class="example">         cd...............Make Browsing Directory The Current Dir....|netrw-c|</code>
<code class="example">         d................Make A New Directory.......................|netrw-d|</code>
<code class="example">         D................Deleting Files or Directories..............|netrw-D|</code>
<code class="example">         &lt;c-h&gt;............Edit File/Directory Hiding List............|netrw-ctrl-h|</code>
<code class="example">         i................Change Listing Style.......................|netrw-i|</code>
<code class="example">         &lt;c-l&gt;............Refreshing the Listing.....................|netrw-ctrl-l|</code>
<code class="example">         o................Browsing with a Horizontal Split...........|netrw-o|</code>
<code class="example">         p................Use Preview Window.........................|netrw-p|</code>
<code class="example">         P................Edit in Previous Window....................|netrw-p|</code>
<code class="example">         q................Listing Bookmarks and History..............|netrw-qb|</code>
<code class="example">         r................Reversing Sorting Order....................|netrw-r|</code>
        (等等)

<code class="special">&lt;F1&gt;</code> 键把你带到 netrw 目录浏览内容的帮助页面。这是一个常规的帮助页面，同样常规
的  <a href="tagsrch.html#CTRL-]">CTRL-]</a>  跳转到带标签的帮助项目，而  <a href="motion.html#CTRL-O">CTRL-O</a>  则返回。

要选择显示和编辑的文件: (光标在某文件名上)

        <code class="special">&lt;enter&gt;</code>         在当前窗口打开文件                          <a href="pi_netrw.html#netrw-cr">netrw-cr</a> 
        o               横向分割窗口并显示文件                      <a href="pi_netrw.html#netrw-o">netrw-o</a> 
        v               竖向分割窗口并显示文件                      <a href="pi_netrw.html#netrw-v">netrw-v</a> 
        p               使用  <a href="windows.html#preview-window">preview-window</a>                        <a href="pi_netrw.html#netrw-p">netrw-p</a> 
        P               在上次的窗口中编辑                          <a href="pi_netrw.html#netrw-P">netrw-P</a> 
        t               在新标签页中打开文件                        <a href="pi_netrw.html#netrw-t">netrw-t</a> 

接下来的普通模式命令用来控制浏览器显示:

        i               控制列表风格 (瘦、长、宽和树形)。长列表包含文件大小和
                        日期信息。
        s               反复按 s 会改变文件排序的方式；可以按照名字、修改日期
                        或文件大小排序。
        r               逆转排列顺序。

略举数例其它的普通模式命令:

        cd              把当前目录改成显示在窗口中的那个目录。(见
                         <a href="pi_netrw.html#g:netrw_keepdir">g:netrw_keepdir</a> ，它也控制此行为)
        R               为光标下文件改名。Vim 将提示你提供新文件名。
        D               删除光标下文件。Vim 将提示你确认删除动作。
        mb gb           建立书签/转到书签


还有命令模式；还是一样，只举数例:

        :Explore <code class="special">[directory]</code>    浏览指定/当前目录
        :NetrwSettings          当前 netrw 设置的综合列表，带有帮助链接。

netrw 浏览器不限于你的本地机器；也可使用 url，如下:    (拖尾的 / 是必需的)

        :Explore ftp://somehost/path/to/dir/
        :e scp://somehost/path/to/dir/

详见  <a href="pi_netrw.html#netrw-browse">netrw-browse</a> 。

</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="22.2">22.2</a> </b>  当前目录</h4>
正如外壳一样，Vim 也有当前目录的概念。假设你在主目录，并要编辑几个储存在目录
"VeryLongFileName" 下的文件。你可以这样做: 
<code class="example"></code>
<code class="example">        :edit VeryLongFileName/file1.txt</code>
<code class="example">        :edit VeryLongFileName/file2.txt</code>
<code class="example">        :edit VeryLongFileName/file3.txt</code>
<code class="example"></code>
为了避免太多的键击，你可以这样做: 
<code class="example"></code>
<code class="example">        :cd VeryLongFileName</code>
<code class="example">        :edit file1.txt</code>
<code class="example">        :edit file2.txt</code>
<code class="example">        :edit file3.txt</code>
<code class="example"></code>
":cd" 命令可以用来改变当前目录。你可以用 ":pwd" 命令来查看当前目录使什么: 
<code class="example"></code>
<code class="example">        :pwd</code>
<code class="example">        /home/Bram/VeryLongFileName</code>
<code class="example"></code>
Vim 记得最近访问过的那个目录。你可以用 "cd -" 命令回去那儿。例如:
 
<code class="example">        :pwd</code>
<code class="example">        /home/Bram/VeryLongFileName</code>
<code class="example">        :cd /etc</code>
<code class="example">        :pwd</code>
<code class="example">        /etc</code>
<code class="example">        :cd -</code>
<code class="example">        :pwd</code>
<code class="example">        /home/Bram/VeryLongFileName</code>
<code class="example">        :cd -</code>
<code class="example">        :pwd</code>
<code class="example">        /etc</code>
<code class="example"></code>
<code class="example"></code>
窗 口 本 地 目 录

当你把窗口一分为二以后，两个窗口的当前目录是一样的。而当你要在新窗口内编辑几个
存放在当前目录以外某处的文件时，你可以让新窗口采用不同的当前目录，同时保持原窗
口当前目录不变。新窗口采用的当前目录称为本地目录。 
<code class="example"></code>
<code class="example">        :pwd</code>
<code class="example">        /home/Bram/VeryLongFileName</code>
<code class="example">        :split</code>
<code class="example">        :lcd /etc</code>
<code class="example">        :pwd</code>
<code class="example">        /etc</code>
<code class="example">        CTRL-W w</code>
<code class="example">        :pwd</code>
<code class="example">        /home/Bram/VeryLongFileName</code>
<code class="example"></code>
只要你不发出  <a href="editing.html#:lcd">:lcd</a>  命令，所有窗口共享同一个当前目录。在一个窗口执行一次  <a href="editing.html#:cd">:cd</a> 
命令，也同时改变其它窗口的当前目录。
   执行过  <a href="editing.html#:lcd">:lcd</a>  命令的窗口记得它特有的当前目录。在其它窗口执行  <a href="editing.html#:cd">:cd</a>  或
 <a href="editing.html#:lcd">:lcd</a>  命令对它毫无影响。
   在一个采用特有当前目录的窗口执行  <a href="editing.html#:cd">:cd</a>  命令以后，该窗口就回过头来又采用共享
的当前目录了。


标 签 页 本 地 目 录

打开新的标签页时，使用打开时所在的之前标签页窗口的目录。可以用  <a href="editing.html#:tcd">:tcd</a>  命令来改
变当前标签页的目录。除了有局部于窗口的目录的窗口以外，同一标签页的所有窗口共享
此目录。任何此标签页上打开的新窗口会使用此目录为当前工作目录。在标签页中使用
 <a href="editing.html#:cd">:cd</a>  命令不会改变有局部于标签页目录的标签页的工作目录。在标签页中使用  <a href="editing.html#:cd">:cd</a> 
命令改变全局目录后，也改变了当前标签页的工作目录。


</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="22.3">22.3</a> </b>  查找文件</h4>
假定现在你在编辑一个 C 程序，该程序有这样一行:

<code class="section">        #include "inits.h" </code>

你想要查看文件 "inits.h" 里有些什么。把光标移到该文件名上，并键入: 
<code class="example"></code>
<code class="example">        gf</code>
<code class="example"></code>
Vim 就会找到并打开这个文件。
   那么，如果该文件不在当前目录里怎么办？Vim 将利用 <a href="options.html#'path'">'path'</a> 选项来寻找这个文
件。该选项是一系列目录名，Vim 会在其中为你寻找文件。
   假设你把你的头文件存放在目录 "c:/prog/include" 里。下面这个命令把该目录加入
<a href="options.html#'path'">'path'</a> 选项: 
<code class="example"></code>
<code class="example">        :set path+=c:/prog/include</code>
<code class="example"></code>
这个目录名是一绝对路径。不管你在哪儿，它都指向同一目录。如果你已经知道要编辑的
文件位于当前文件所在目录下某个子目录里，你该怎么办呢？那样的话，你可以指定一个
相对路径。相对路径以 "." 开始:

<code class="example">        :set path+=./proto</code>
<code class="example"></code>
这个命令告诉 Vim 到目录 "proto" 里找文件，而 "proto" 则位于你在其中用了 "gf"
命令的文件所在的目录下面。如此一来，对 "inits.h" 用 "gf" 命令，就让 Vim 以当前
文件所在目录为起点，寻找 "proto/inits.h"。
   如果不加 "./"，只用 "proto"，Vim 就会进入当前目录下的 "proto" 目录寻找。然
而当前目录可能不是你在编辑的这个当前文件所在的目录。

<a href="options.html#'path'">'path'</a> 选项还允许你用其它许多方法来指定在其中寻找文件的目录。参见关于 <a href="options.html#'path'">'path'</a>
选项的帮助。
   <a href="options.html#'isfname'">'isfname'</a> 选项用来决定哪些字符可用于文件名，以及哪些不可以 (如上例中的双引
号 " 字符)。

当你要找的文件名没出现在你编辑的文件里时，你可以键入这个文件名: 
<code class="example"></code>
<code class="example">        :find inits.h</code>
<code class="example"></code>
然后 Vim 就利用 <a href="options.html#'path'">'path'</a> 选项来确定该文件的位置。这就跟 ":edit" 命令一样，只不过
":edit" 命令不用 <a href="options.html#'path'">'path'</a> 选项。

要在新窗口内打开那个已经找到的文件，用 <code class="keystroke">CTRL-W</code> f，而不是 "gf"，或用 ":sfind" 而
不是 ":find"。

有个好办法可以直接启动 Vim 来编辑 <a href="options.html#'path'">'path'</a> 中的某个文件: 
<code class="example"></code>
<code class="example">        vim "+find stdio.h"</code>
<code class="example"></code>
这会在你的 <a href="options.html#'path'">'path'</a> 中查找 "stdio.h"。双引号是必需的，用来把括起来的当做一个参数
 <a href="starting.html#-+c">-+c</a> 。

</section><hr class="doubleline" /><section class=inner>
<h4><b class="vimtag"> <a name="22.4">22.4</a> </b>  缓冲区列表</h4>
Vim 编辑器使用术语 "缓冲区" 来描述编辑当中的文件。实际上，缓冲区是你编辑的文件
的副本。你修改完缓冲区，就把缓冲区的内容写进文件。缓冲区不仅存放文件内容，而且
还存放着全部标记，设定，以及其它跟被编辑文件相关的东西。


隐 藏 的 缓 冲 区

假设你在编辑文件 one.txt，同时又要编辑文件 two.txt。你本来可以简单地用 ":edit
two.txt" 来办到，但由于你已经修改了 one.txt，那样做就没用了。而你又不想在此时
就把 one.txt 存盘。Vim 可以为你解决这个问题: 
<code class="example"></code>
<code class="example">        :hide edit two.txt</code>
<code class="example"></code>
缓冲区 "one.txt" 从屏幕消失，但 Vim 仍然知道你在编辑这个缓冲区，因而保留着它修
改过的文本。这样的缓冲区称为隐藏的缓冲区: 缓冲区存放着文本，但你看不见它。
   ":hide" 命令参数是另一个命令。":hide" 使得那个命令表现得就像 <a href="options.html#'hidden'">'hidden'</a> 选项
已被设定。你也可以不用 ":hide" 命令而设定 <a href="options.html#'hidden'">'hidden'</a> 选项。其作用是当离开任何缓
冲区时，该缓冲区变成隐藏。
   小心！当你的隐藏的缓冲区已经改动，千万不要在所有缓冲区存盘之前就退出 Vim。


非 激 活 缓 冲 区

   一个缓冲区一经使用，Vim 就记住了一些有关该缓冲区的信息。即使它既不显示在窗
口内，又非隐藏缓冲区，它也仍然在缓冲区列表上。这样的缓冲区称为非激活缓冲区。一
般而言，

   激活         显示在窗口内，并加载文本
   隐藏         不显示在窗口内，但加载文本
   非激活       不显示在窗口内，不加载文本

非激活缓冲区不会被遗忘，因为 Vim 保存着关于它们的信息，如标记等。而且记住文件
名有个好处，你可以调阅你编辑过的文件名，再次编辑它们。


缓 冲 区 列 表

你可以用这个命令查看缓冲区列表:

        :buffers

另一个作用相当的命令，虽然意思不那么明白，但键入时省事多了: 
<code class="example"></code>
<code class="example">        :ls</code>
<code class="example"></code>
其输出可能像这样:

<code class="section">  1 #h   "help.txt"                     line 62 </code>
<code class="section">  2 %a + "usr_21.txt"                   line 1 </code>
<code class="section">  3      "usr_toc.txt"                  line 1 </code>

第一栏存放缓冲区号。你可以利用它来编辑文件，而不用键入文件名，参见下文。
   紧随缓冲区号的是些标志位。然后是文件名，以及光标最后一次停留的行号。
   可能出现的标志位有以下这些 (自左至右):

        u       列表外缓冲区  <a href="windows.html#unlisted-buffer">unlisted-buffer</a> 。
         %      当前缓冲区。
         #      轮换缓冲区。
          a     激活缓冲区，缓冲区被加载且显示。
          h     隐藏缓冲区，缓冲区被加载但不显示。
           =    只读缓冲区。
           -    不可改缓冲区，<a href="options.html#'modifiable'">'modifiable'</a> 选项不置位。
            +   已修改缓冲区。


编 辑 缓 冲 区

你可以通过指定其缓冲区号来编辑一个缓冲区，而不必键入文件名: 
<code class="example"></code>
<code class="example">        :buffer 2</code>
<code class="example"></code>
但获知缓冲区号的唯一途径是查阅缓冲区列表。如果不用缓冲区号，你可以用文件名，或
其部分:

        :buffer help

Vim 将为你键入的文件名找到最佳匹配。如果只有一个缓冲区与之匹配，该缓冲区就被选
用。在这个例子中，被选中的就是 "help.txt"。
   要在新窗口中打开一个缓冲区:

        :sbuffer 3

这方法也适用于文件名。


使 用 缓 冲 区 列 表

你可以用这些命令在缓冲区列表间移动:

        :bnext          编辑下一个缓冲区
        :bprevious      编辑前一个缓冲区
        :bfirst         编辑第一个缓冲区
        :blast          编辑最后一个缓冲区

要从缓冲区列表上删除一个缓冲区，用这个命令:

        :bdelete 3

同样，这命令也适用文件名。
   如果你删除了一个激活的缓冲区 (显示在窗口中的缓冲区)，你也就关闭了该窗口。如
果你删除了当前缓冲区，你也就关闭了当前窗口。如果它是最后一个窗口，Vim 将找一个
缓冲区来编辑。你无法什么也不编辑！

        <code class="note">备注</code>:
        即使用 ":bdelete" 命令删除了缓冲区以后，Vim 依然记得它。这个缓冲区实际
        上成了 "列表外" 缓冲区，它不再出现在 ":buffers" 命令所报告的列表中。不
        过 ":buffers!" 命令仍会列出 "列表外" 缓冲区 (没错，Vim 无所不能)。要让
        Vim 彻底忘记一个缓冲区，用 ":bwipe" 命令。另见 <a href="options.html#'buflisted'">'buflisted'</a> 选项。

</section><hr class="doubleline" /><section class=inner>
<h4></h4>下一章:  <a href="usr_23.html#usr_23.txt">usr_23.txt</a>   编辑其它文件

版权: 参见  <a href="usr_01.html#manual-copyright">manual-copyright</a>   vim:tw=78:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
